// 二,基于以下代码完成下面的四个练习

// noinspection JSUnresolvedFunction
const fp = require('lodash/fp')
//数据
// horsepower 马力,dollar_value价格,in_stock库存

const cars = [
    {name: 'Ferrari FF', horsepower: 660, dollar_value: 700000, in_stock: true},
    {name: 'Spyker c12 Zagato', horsepower: 650, dollar_value: 648000, in_stock: false},
    {name: 'Jaguar XKR-S', horsepower: 550, dollar_value: 132000, in_stock: false},
    {name: 'Audi R8', horsepower: 525, dollar_value: 114200, in_stock: false},
    {name: 'Aston Martin One-77', horsepower: 750, dollar_value: 185000, in_stock: true},
    {name: 'Pagani Huayra', horsepower: 700, dollar_value: 1300000, in_stock: false},
]


// 练习1:使用数组合fp.flowRight()重新实现下面这个函数
// let isLastInStock = function (cars) {
//     // 获取最后一条数据
//     let last_car = fp.last(cars)
//     // 获取最后一条数据的in_stock属性值
//     return fp.prop('in_stock', last_car)
// }

const isLastInStock = fp.flowRight(fp.prop('in_stock'), fp.last)
console.log('练习1:last car is is stock:', isLastInStock(cars));




// 练习2:使用fp.flowRight(),fp.prop()和fp.first()获取第一个car的name
const firstCarName = fp.flowRight(fp.prop("name"), fp.first);
console.log("练习2:first car name:", firstCarName(cars))




// 练习3:使用帮助函数_average重构averageDollarValue,使用函数组合方式实现
const _average = function (xs) {// <-无须改动
    return fp.reduce(fp.add, 0, xs) / xs.length
}

// const averageDollarValue = function (cars) {
//     const dollar_values = fp.map(function (car) {
//         return car.dollar_value;
//     }, cars);
//     return _average(dollar_values);
// }
const averageDollarValue = fp.flow(fp.map(fp.prop("dollar_value")), _average);
console.log("练习3:", averageDollarValue(cars))



//练习4:使用flowRight写一个sanitizeNames()函数,返回一个下划线连接的小写字符串,把数组中的name转换为这种形式
// 例如:sanitizeNames(["Hello World"])=>["hello_world"]

const _underscore = fp.replace(/\\w+/g, '_')// <--无须改动,并在sanitizeNames中使用它

const sanitizeNames = fp.flowRight(fp.map(fp.lowerCase), fp.map(_underscore))

console.log('练习4', sanitizeNames(["Hello World"]))
